//
// 十字链表
// Created by 麻再挺 on 2021/12/16.
//

#ifndef DATA_STRUCTURE_C_OL_GRAPH_H
#define DATA_STRUCTURE_C_OL_GRAPH_H

#include <stdio.h>
#include <stdlib.h>
#include "graph_constant.h"


// 图结点
typedef struct ArcBox{
    // 弧尾、弧头对应顶点在数组中的位置下标
    int tailVex, headVex;
    // 分别指向弧头相同和弧尾相同的下一个弧
    struct ArcBox *hLink, *tLink;
    // 弧或边额外含有的信息
    InfoType *info;
} ArcBox;

// 顶点信息
typedef struct VNode {
    // 顶点的数据域
    VertexType data;
    // 指向以该顶点为弧头和弧尾的链表收个结点
    ArcBox *firstIn, *firstOut;
} VexNode;

// 图结构
typedef struct {
    // 存储顶点的一维数组
    VexNode  xList[MAX_VERTEX_NUM];
    // 记录图的顶点数和弧数
    int vexNum, arcNum;
} OLGraph;

/**
 * 创建十字链表图
 * @param g  图
 */
void CreateODG(OLGraph *g);


#endif //DATA_STRUCTURE_C_OL_GRAPH_H
